package com.zkh.myutils.net.utils;

import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 传输事件监听器处理器，用来添加、移除、执行监听器
 * @author zkh
 */
public class TransferEventListenerHandler {
	//源对象
	private Object source;
	//事件列表
	private CopyOnWriteArrayList<TransferEventListener> list;
	
	/**
	 * 构造方法
	 * @param source 源对象
	 */
	public TransferEventListenerHandler(Object source) {
		this.source = source;
		this.list = new CopyOnWriteArrayList<>();
	}
	
	/**
	 * 添加传输事件监听器
	 * @param listener 监听器
	 */
	public void addTransferEventListener(TransferEventListener listener) {
		list.add(listener);
	}
	
	/**
	 * 移除传输事件监听器
	 * @param listener 监听器
	 */
	public void removeTransferEventListener(TransferEventListener listener) {
		list.remove(listener);
	}
	
	/**
	 * 获取监听器数量
	 * @return
	 */
	public int getListenerCount() {
		return list.size();
	}
	
	/**
	 * 当发送命令时，触发监听器
	 * @param command 命令
	 * @param message 消息
	 */
	public void fireCommandSent(String command, String message) {
		//创建传输事件
		TransferEvent event = new TransferEvent(source, command, message);
		//遍历事件列表
		list.forEach(listener->listener.commandSent(event));
	}
	
	/**
	 * 当接收到响应时，触发监听器
	 * @param replyCode 响应代码
	 * @param message 消息
	 */
	public void fireReplyReceived(int replyCode, String message) {
		//创建传输事件
		TransferEvent event = new TransferEvent(source, replyCode, message);
		//遍历事件列表
		list.forEach(listener->listener.replyReceived(event));
	}
}
